package com.fgba.express.data.service;

import com.fgba.express.core.service.ICrudService;
import com.fgba.express.data.dto.UserDto;
import com.fgba.express.data.entity.User;
import com.fgba.express.data.search.UserSearch;

import java.io.Serializable;
import java.util.Collection;


/**
 * <p>
 * 用户 服务类
 * </p>
 *
 * @author fgba
 * @since 2022-02-24
 */
public interface IUserService extends ICrudService<User, UserDto, UserSearch> {

    /**
     * 微信id绑定用户
     * @param username 用户名
     * @param password 身份证后6位
     * @param openId 微信openId
     * @return 是否成功
     */
    boolean bindUser(String username,String password, String openId);
    /**
     * 根据用户名获取用户对象
     *
     * @param username 用户编号
     * @return 用户对象
     */
    User getUserByUsername(String username);
    /**
     * 根据微信Id获取用户对象
     *
     * @param wxId 微信Id
     * @return 用户对象
     */
    User getUserByWxId(String wxId);
    /**
     * 获取该用户id的权限和角色组成的字符串
     *
     * @param userId 用户id
     * @return 特定类型的字符串
     */
    String getUserAuthorityInfo(Long userId);

    /**
     * 根据用户名删除redis缓存权限
     *
     * @param username 用户名
     */
    void clearUserAuthorityInfo(String username);

    /**
     * 根据角色id删除拥有该角色的用户redis缓存权限
     *
     * @param roleId 角色id
     */
    void clearUserAuthorityInfoByRoleId(Long roleId);

    /**
     * 根据菜单id删除拥有该菜单权限用户的redis缓存权限
     *
     * @param menuId 权限id
     */
    void clearUserAuthorityInfoByMenuId(Long menuId);

    @Override
    boolean removeById(Serializable id);

    @Override
    boolean removeByIds(Collection<? extends Serializable> idList);
}
